package JDBC_2;

public class M {
    /*CASE WHEN分类
        1 基于值的比较
        SELECT
            season
            CASE
            WHEN 'Spring' THEN '春天'
            WHEN 'Summer' THEN '...'
            ...
            ELSE '未知'
            END
        2 基于条件的搜索 相当于java中的if...else if...
     */
    //注意 THEN ELSE后的数据类型应该保持一致 以避免SQL执行时的类型转换错误
    //CASE WHEN 在找到符合条件的语句后会立刻返回而不会继续向下走 且CASE WHEN自带循环

    /*
        2 有没有做过SQL语句优化
        * 优化查询结构
            1 减少全表查询
            2 优化WHERE子句 减少OR的使用
            3 避免子查询 多用JOIN ON
            4 使用EXISTS而非IN
        * 选择合适的查询策略
        * SQL执行计划分析
        * 连接优化
            1 内连接代替外连接
            2 优化连接顺序 将数据少的表作为驱动表
     */
    //池
    //线程池 Thread Pool
    /**
     * 作用
     *  1 重复使用内部线程(复用线程)
     *  2 控制线程数量
     *
     * 创建过程
     *  1 线程任务
     *  2 创建线程
     *  3 启动 start()
     *  4 并发执行中
     *  5 任务执行完毕
     *  6 线程销毁
     *
     * 类比: 坐公交车时 到站后乘客下车 但是公交车并不会销毁 浪费资源
     * 得出结论: 线程不应该是一次性的---复用
     *
     * 类比: 公交车的数量🚌应该得到控制 否则道路压力极大
     * 得出结论: 任务很多时 线程的数量应该得到控制
     *
     * 线程池API
     *  1 Executors 工厂类
     *  2 ExecutorService
     *
     * 线程池内部有队列 用于将任务排序 保证任务线程先到先得 先创建先执行
     *
     * 线程池的关闭
     *  1 shutdown() 不再接受新任务了 但是会将现有的任务全部执行完毕再关闭
     *  2 shutdownNow() 不再接受新任务 并且立刻停止所有任务
     */

    //连接池
    /**
     * Connection的创建是很耗时间的
     *
     * 连接池的连接是被包装了一层的 close()方法是被重写的 当连接池中的连接被使用时 表示的是"已借出"的状态
     * 当连接使用完毕后try(){}调用close()方法时 调用的不再是原始的方法 这种重写的方法只是将此连接的状态
     * 变为"空闲/可供借用"状态 而非真正关闭 其他没有区别
     */
}
